(function (G) {
  window["components_Form_Design_Design"]({
  "component": true,
  "usingComponents": {
    "formitems":"/components/Form/Items/Items"
  },
  "Web":{
    
  }
},{
template:'#TEMPLATE_components_Form_Design_Design',

    props: {
      readOnly: {
        type: Boolean,
        'default': false
      }
    },
    data: function () {
      return {
        visble:false,
        content:'',
        type:'input',
        models:{},
        defaultModels:{
          label:{
            label:'字段名称',
            rule:{ NotNull:true },
            type:'input'
          },
          NotNull_rule:{
            label:'不能为空',
            type:'switch'
          },
          unique:{
            label:'是否唯一',
            type:'switch'
          },
          readOnly:{
            label:'只读',
            type:'switch'
          },
          defaultValue:{
            label:'默认值',
            type:'input'
          },
          data_type:{
            label:'数据库配置',
            attr:{
              placeholder:'数据库创建时优先级最高'
            },
            type:'input'
          },
          desc:{
            label:'字段说明',
            type:'input'
          },
          rule:{
            label:'校验规则',
            type:'title',
            sort:1000
          },
          MaxLength_rule:{
            label:'最大长度',
            attr:{
              type:'number'
            },
            type:'input',
            sort:1000
          },
          MinLength_rule:{
            label:'最小长度',
            attr:{
              type:'number'
            },
            type:'input',
            sort:1000
          },
          MaxNumber_rule:{
            label:'最大值',
            attr:{
              type:'number'
            },
            type:'input',
            sort:1000
          },
          MinNumber_rule:{
            label:'最小值',
            attr:{
              type:'number'
            },
            type:'input',
            sort:1000
          },
          Regx_rule:{
            label:'正则表达式',
            type:'input',
            sort:1000
          },
          Phone_rule:{
            label:'电话号码',
            type:'switch',
            sort:1000
          },
          IDCard_rule:{
            label:'身份证号',
            type:'switch',
            sort:1000
          },
          Email_rule:{
            label:'邮箱',
            type:'switch',
            sort:1000
          },
          Date_rule:{
            label:'日期',
            type:'switch',
            sort:1000
          },
          PositiveNum_rule:{
            label:'正数',
            type:'switch',
            sort:1000
          },
          PositiveInt_rule:{
            label:'正整数',
            type:'switch',
            sort:1000
          },
          attr:{
            label:'属性设置',
            type:'title'
          },
          placeholder_attr:{
            label:'站位符(placeholder)',
            type:'input',
            sort:101
          },
          webStyle:{
            label:'前端样式',
            type:'title',
            sort:102
          },
          unList:{
            label:'列表中隐藏',
            type:'switch',
            sort:102
          },
          style:{
            label:'表单中样式',
            type:'input',
            sort:102
          }
        },
        typeNames:{
          input:'输入框',
          select:'下拉选择',
          onlyselect:'关联选择',
          datetime:'日期时间',
          image:'图片',
          textarea:'文本区域',
          file:'文件',
          date:'日期',
          time:'时间',
          radio:'单选',
          checkbox:'多选',
          editor:'富文本编辑器',
          region:'省市区',
          title:'分区标志'
        },
        types: {
          input:{
            type_attr:{
              label:'文本类型(type)',
              defaultValue:'text',
              attr:{
                actions:[
                  { value:'text',name:'文本' },
                  { value:'number',name:'数字' },
                  { value:'phone',name:'电话号码' }
                ]
              },
              type:'radio'
            },
            maxlength_attr:{
              label:'最大字符(maxlength)',
              attr:{ type:'number' },
              type:'input'
            }
          },
          textarea:{
            rows:{
              label:'行数(rows)',
              attr:{ type:'number' },
              type:'input'
            },
            cols:{
              label:'列数(cols)',
              attr:{ type:'number' },
              type:'input'
            }
          },
          editor:{},
          region:{},
          title:{},
          date:{
            min_attr:{
              label:'最小年份',
              attr:{ type:'number',placeholder:'1900-01-01' },
              type:'input'
            },
            max_attr:{
              label:'最大年份',
              attr:{ type:'number',placeholder:'2050-12-31' },
              type:'input'
            },
            type_attr:{
              label:'类型',
              attr:{
                actions:[
                  { name:'年',value:1 },
                  { name:'年-月',value:2 },
                  { name:'年-月-日',value:3 }
                ]
              },
              type:'radio'
            }
          },
          datetime:{
            min_attr:{
              label:'最小年份',
              attr:{ type:'number',placeholder:'1900-01-01' },
              type:'input'
            },
            max_attr:{
              label:'最大年份',
              attr:{ type:'number',placeholder:'2050-12-31' },
              type:'input'
            }
          },
          select:{
            actions_attr:{
              label:'选项',
              attr:{
                models:{
                  name:{
                    type:'input',
                    label:'选项'
                  },
                  value:{
                    type:'input',
                    label:'值'
                  }
                }
              },
              type:'table'
            }
          },
          radio:{
            actions_attr:{
              label:'选项',
              attr:{
                models:{
                  name:{
                    type:'input',
                    label:'选项'
                  },
                  value:{
                    type:'input',
                    label:'值'
                  }
                }
              },
              type:'table'
            }
          },
          checkbox:{
            actions_attr:{
              label:'选项',
              attr:{
                models:{
                  name:{
                    type:'input',
                    label:'选项'
                  },
                  value:{
                    type:'input',
                    label:'值'
                  }
                }
              },
              type:'table'
            }
          },
          image:{
            width_attr:{
              label:'宽度',
              attr:{ type:'number' },
              type:'input'
            },
            height_attr:{
              label:'高度',
              attr:{ type:'number' },
              type:'input'
            },
            radius_attr:{
              label:'圆角大小',
              attr:{ type:'number' },
              type:'input'
            },
            limit_attr:{
              label:'最大张数',
              attr:{ type:'number' },
              type:'input'
            }
          },
          file:{
            maxSize_attr:{
              label:'限制大小',
              attr:{ type:'number',placeholder:'单位:kb' },
              type:'input'
            },
            limit_attr:{
              label:'最大张数',
              attr:{ type:'number' },
              type:'input'
            }
          },
          onlyselect:{
            url_attr:{
              label:'接口地址',
              type:'input'
            },
            skey_attr:{
              label:'显示字段',
              type:'input'
            },
            vkey_attr:{
              label:'取值字段',
              type:'input'
            },
            canClear_attr:{
              label:'是否可清空',
              type:'switch'
            },
            title_attr:{
              label:'弹框标题',
              type:'input'
            }
          }
        }
      }
    },
    mounted:function(){
      // this.build('input')
    },
    methods: {
      getCode(){
        var data = this.selectComponent('#form').submit(),values = { type: this.type }
        if(!data) return
        for(let key in data){
          let value = data[key]
          if(!value) continue
          if(this.models[key].type == 'switch') {
            value = true
          }else if(this.models[key].type == 'table'){
            value = JSON.parse(value)
          }
          let keys = key.split('_')
          if(keys[1]) {
            if(!values[keys[1]]) values[keys[1]] = {}
            values[keys[1]][keys[0]] = value
          }else{
            values[keys[0]] = value
          }
        }
        return { values,data }
			},
      getSql(){
        let code = this.getCode()
        if(code.values){
          let sql = this.creatCol(code.values.label,code.values)
          return sql ? `ALTER TABLE yourtable CHANGE/ADD COLUMN ${sql}` : ''
        }
      },
      creatCol(key,model){
        let rc = '',defalutType = 'VARCHAR(255)'
        if(model.type == 'title') return
        var data_type = model.data_type || ''
        // if (key == '_id' && !data_type) data_type = 'BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY';
        // if (key == 'id' && !data_type) data_type = 'BIGINT NOT NULL UNIQUE';
        // if (key == '_id' && !data_type) data_type = 'BIGINT NOT NULL AUTO_INCREMENT';
        if (key == 'id' && !data_type) data_type = 'BIGINT NOT NULL UNIQUE PRIMARY KEY';
        model.rule = model.rule || {};
        if (!data_type) {
          var datatype = model.rule.PositiveNum ? 'DOUBLE' : (model.rule.PositiveInt ? 'INT' : defalutType);
          if(/sort|state|level|status/.test(key)
            || model.type == 'switch' 
            || (model.attr && model.attr.type == 'number')){
            datatype = 'INT';
          }else if(model.type == 'datetime'){
            datatype = 'BIGINT';
          }
          data_type += datatype;
          if (model.rule.NotNull) data_type += ' NOT NULL';
        }
        if (/file|editor|table|form|mappolygon/.test(model.type)) {
          data_type = 'LONGTEXT';
        }else if(/image/.test(model.type) && model.attr && model.attr.limit > 2){
          data_type = 'LONGTEXT';
        }
        rc = key + ' ' + (data_type || defalutType);
        ///唯一
        if(model.unique) rc += ' UNIQUE';
        ///默认值
        if(model.defaultValue){
          if(/^[0-9]*$/.test(model.defaultValue)){
            rc += ' DEFAULT ' + model.defaultValue;
          }else{
            rc += ' DEFAULT "' + model.defaultValue + '"';
          }
        }
        ///描述
        let desc = model.desc || model.label || ''
        if(desc) rc += ' COMMENT "' + desc + '"';
        if(model.attr && model.attr.actions){
          let descs = []
          for(let i = 0; i < model.attr.actions.length;i ++){
            let item = model.attr.actions[i]
            descs.push(`${item.name}:${item.value}`)
          }
          if(descs.length) desc += ` ${descs.join(',')}`
        }
        return rc
      },
			build(type,data){
        this.type = type
				let models = Object.assign({},this.defaultModels,this.types[type])
        this.models = models
        this.selectComponent('#form').init(models, data,false,[])
			}
    }
  })
})(Y)
